在這個「史諾登後」的時代,不管是個人、或是各大公司,都開始對於「隱私」和「通信安全」都變得比以前更加注重許多。從前,通常只有在「付款」的頁面上,才會看到 SSL 的提示。
不過,當時很多頁面就連付款或是登入相關都沒有做 SSL。
而且很多 SSL 的憑證還是不正確的。
首先,HTTPS 能夠確保:
最後,HTTPS 對於許多的平台來說,都已經是一個最低要求了。例如蘋果的 App Store 即有規定:所有的連線都必須要使用 HTTPS,若沒有使用或者是沒有正確設定的話,這個 App 將不能上架。甚至,在 Chrome 當中,某些頁面將會因為沒有 HTTPS 的關係,會在網址列顯示警示。
簡單來說,HTTPS 基本上就是讓 HTTP 以加密的方式傳輸資料。若有第三者竊聽到這段通訊,也只會拿到一些沒有辦法解開的內容。平常生活中,這些這三者有可能是學校、公司單位、政府或任何人。
要解說 HTTPS 之前, 我們會討論到兩種加密方式:
非對稱加密是指,要通信的兩方各有一把公開金鑰和私密金鑰。這兩把金鑰是能夠以某種算法去做對應關係的。公鑰是拿來將明文轉為密文(即加密過的內容),而私鑰是能夠將密文轉回來明文的。
當使用公鑰加密訊息之後,就只能用相對應的那把私鑰去將那個訊息解密。因為並不能用公鑰去反推出私鑰的內容,因此,公鑰是可以公開的。至於_私鑰_,就名稱來說,很明顯,是不應該給任何其他人知道的。
非對稱加密的優點是,雙方可以在任何不安全的頻道下,且沒有事前做好準備(例如分享金鑰,這叫對稱加密)的狀況下,可以進行私密的通訊。
Diffie-Hellman 是一種交換金鑰的方式。這個算法能夠讓兩方在不用把密鑰傳輸出去的狀況下,使用一些事前就知道的內容,來產生一把金鑰。
非對稱加密的速度比起對稱加密來說,非常的慢。因此,非對稱加密通常只會拿來進行身份驗證。HTTPS 的伺服器和客戶端,一開始是先以非對稱加密,用各自的私鑰,和一些對方分享出來的資料,去決定一把共享的金鑰,再以這個金鑰來進行對稱加密。
以 Diffie-Hellman 來進行金鑰的交換時,步驟大概是這樣的:
(p^數字)%質數
,並傳給對方,這個結果稱為 mix
(mix^數字)%質數
。因為乘法交換的關係,雙方算出的數值會是相等的。因為有了一把共享金鑰,你可以開始進行 對稱加密。當然,數字都不能太小,產生亂數的機制也不能太糟糕。否則很容易就能通過窮舉等等的方式來做破解,或甚至更糟糕(例如第三方偷換數字)。另外,由於雙方都沒有透露出自己持有的那部分(數字/私鑰),所以即使第一、二步的結果被偷走了,也不會影響到安全性。
文字有點長,這裡有一張神圖可以解釋一下發生什麼事。
下篇會解說其他的部分。